package cmdbsendmsg

import (
	"dfx_cmdb/models"
	cmdbcloudaccess "dfx_cmdb/models/cmdb-cloud-access"
)

// SendMethod 发送方法配置表 - 定义发送渠道的基本信息
type SendMethod struct {
	models.Models
	SendUrl        string `gorm:"size:128" json:"send_url"`        // 发送接口URL
	SendMethodType string `gorm:"size:32" json:"send_method_type"` // 发送方式类型(SMS/Email等)
	SendPlatform   string `gorm:"size:32" json:"send_platform"`    // 发送平台(阿里云/腾讯云等)
	CloudId        uint32 `gorm:"index;not null" json:"cloud_id"`  // 关联的云服务配置ID

	// 关联关系
	CloudAccess cmdbcloudaccess.CloudAccess `gorm:"foreignKey:CloudId;references:Id"`

	// 一对多关系：一个发送方法可以被多个通知配置使用
	NotificationConfigs []NotificationConfig `gorm:"foreignKey:SendMethodID;references:Id"`
}

// NotificationConfig 通知配置表 - 定义具体的通知配置
type NotificationConfig struct {
	models.Models
	ConfigName   string `gorm:"size:128;not null" json:"config_name"` // 配置名称
	SendMethodID uint32 `gorm:"index;not null" json:"send_method_id"` // 发送方法ID
	AlterPhoneID uint32 `gorm:"index;not null" json:"alter_phone_id"` // 告警联系人ID
	TemplateID   uint32 `gorm:"index;not null" json:"template_id"`    // 模板ID
	IsActive     bool   `gorm:"default:true" json:"is_active"`        // 是否启用

	// 关联关系 - 多对一
	SendMethod       SendMethod       `gorm:"foreignKey:SendMethodId;references:Id"`
	SendTemplate     SendTemplate     `gorm:"foreignKey:TemplateID;references:Id"`
	AlterPhoneNumber AlterPhoneNumber `gorm:"foreignKey:AlterPhoneID;references:Id"`
}

func (NotificationConfig) TableName() string {
	return "cmdb_notification_config"
}

func (SendMethod) TableName() string {
	return "cmdb_send_method"
}

type SendTemplate struct {
	models.Models
	TemplateName string `gorm:"size:128" json:"template_name"`
	TemplateMsg  string `gorm:"type:text" json:"template_msg"`
}

func (SendTemplate) TableName() string {
	return "cmdb_send_template"
}

type AlterPhoneNumber struct {
	models.Models
	// 手机号
	PhoneNumber string `gorm:"size:32;index;not null" json:"phone_number"`
	// 备注
	Description string `gorm:"size:128" json:"description"`
}

func (AlterPhoneNumber) TableName() string {
	return "cmdb_alter_phone_number"
}
